/**
 * 给出一棵二叉树，其上每个结点的值都是0或1。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。
 *
 * 例如，如果路径为0 -> 1 -> 1 -> 0 -> 1，那么它表示二进制数01101，也就是13。
 * 对树上的每一片叶子，我们都要找出从根到该叶子的路径所表示的数字。
 *
 * 返回这些数字之和。题目数据保证答案是一个 32 位 整数。
 *
  * 链接：https://leetcode.cn/problems/sum-of-root-to-leaf-binary-numbers
 * 思路：前序遍历递归
 */
class SumRootToLeaf {
    public int sumRootToLeaf(TreeNode root) {
        if(root==null){
            return 0;
        }
        return sumRootToLeafChild(root,0);
    }
    public int sumRootToLeafChild(TreeNode root,int  sum){
        if(root==null){
            return 0;
        }
        sum=sum*2+root.val;
     if (root.left == null && root.right == null) {
            return sum;
        }
        int left=sumRootToLeafChild(root.left,sum);
        int right=sumRootToLeafChild(root.right,sum);
        return left+right;
    }
}